/* interface */
import { RuleForm } from '@src/modules/task/components/AllotRuleModal/AllotRuleModalInterface'
import { RuleTypeEnum, AllotGroupEnum } from '@src/modules/task/components/AllotRuleModal/AllotRuleModalModel'
import i18n from '@src/locales'

/* 效验方法 */
function validate(form: RuleForm): Promise<boolean> {
  let { name, groupType, groupData, order, type, typeData, schedulePlan, scheduleStandard } = form
  return new Promise((resolve, reject) => {
    // 名称
    if (!name) {
      reject(i18n.t('task.tip.allotRuleTip2'))
    }
    
    // const NameReg = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/
    // if (!NameReg.test(name)) {
    //   reject(i18n.t('task.tip.allotRuleTip3'))
    // }
    
    // 规则类型
    if (!type) {
      reject(i18n.t('common.placeholder.selectSomething', {0: i18n.t('task.components.allotRuleModal.ruleType')}))
    }
    
    // 规则类型 按照工单类型
    if (type === RuleTypeEnum.Type && typeData[RuleTypeEnum.Type].length <= 0) {
      reject(i18n.t('task.tip.allotRuleTip4'))
    }
    
    // 规则类型 按照特定条件
    let { field, operator, value } = typeData[RuleTypeEnum.Select]
    if (type === RuleTypeEnum.Select && !(field && operator && value)) {
      reject(i18n.t('task.tip.allotRuleTip5'))
    }
    
    // 规则类型 按客户所属部门
    let { tags } = typeData[RuleTypeEnum.Tag]
    if (type === RuleTypeEnum.Tag && tags.length <= 0) {
      reject(i18n.t('common.placeholder.selectSomething', {0: i18n.t('task.components.allotRuleModal.customerTag')}))
    }
    
    // 分配给 指定人员
    if (groupType == AllotGroupEnum.User && type !== RuleTypeEnum.Service) {
      let isUsersEmpty = groupData[AllotGroupEnum.User].length <= 0
      isUsersEmpty ? reject(i18n.t('common.placeholder.selectSomething', {0: i18n.t('common.base.userTypes.designatedUser')})) : resolve(true)
    }
    
    // 分配给 指定角色
    if (groupType == AllotGroupEnum.Role) {
      let isRolesEmpty = groupData[AllotGroupEnum.Role].length <= 0
      isRolesEmpty ? reject(i18n.t('common.placeholder.selectSomething', {0: i18n.t('common.base.userTypes.designatedRole')})) : resolve(true)
    }
    
    // 分配给 指定服务部门
    if (groupType == AllotGroupEnum.Tag) {
      let isTagsEmpty = groupData[AllotGroupEnum.Tag].length <= 0
      isTagsEmpty ? reject(i18n.t('task.tip.allotRuleTip6')) : resolve(true)
    }
    
    // 分配给 指定服务部门主管
    if (groupType == AllotGroupEnum.TagLeader) {
      let isTagsEmpty = groupData[AllotGroupEnum.TagLeader].length <= 0
      isTagsEmpty ? reject(i18n.t('task.tip.allotRuleTip7')) : resolve(true)
    }
    
    // 派单顺序
    if (!order) {
      reject(i18n.t('task.tip.allotRuleTip8'))
    }

    // 派单时间准则
    if (type == RuleTypeEnum.Service && schedulePlan?.length > 0 && !scheduleStandard) {
      reject(i18n.t('task.tip.allotRuleTip9'))
    }
    
    resolve(true)
  })
}

export default validate